Skip to content

投票ブループリント

投票ブループリントは、aoで迅速に投票システムを構築するための事前設計されたテンプレートです。これは、始めるのに最適な方法であり、ニーズに合わせてカスタマイズできます。

前提条件

投票ブループリントを使用するには、まずトークンブループリントをロードする必要があります。

投票ブループリントの内容

  • バランス: Balances配列は、参加者のトークンバランスを保存するために使用されます。

  • 投票: Votes配列は、参加者の投票を保存するために使用されます。

  • 投票アクションハンドラー: voteハンドラーは、プロセスが投票できるようにします。プロセスがAction = "Vote"というタグのメッセージを送信すると、ハンドラーは投票をVotes配列に追加し、投票が確認されたことを示すメッセージをプロセスに返します。

  • 最終化ハンドラー: finalizeハンドラーは、プロセスが投票プロセスを最終化できるようにします。プロセスがAction = "Finalize"というタグのメッセージを送信すると、ハンドラーは投票を処理し、投票プロセスを最終化します。

使用方法:

  1. 好みのテキストエディタを開きます。
  2. ターミナルを開きます。
  3. aosプロセスを開始します。
  4. .load-blueprint votingと入力します。

ブループリントがロードされたか確認する:

Handlers.listと入力して、新しくロードされたハンドラーを確認します。

投票ブループリントの内容:

lua
Balances = Balances or {}
Votes = Votes or {}

-- Vote Action Handler
Handlers.vote = function(msg)
  local quantity = Stakers[msg.From].amount
  local target = msg.Tags.Target
  local side = msg.Tags.Side
  local deadline = tonumber(msg['Block-Height']) + tonumber(msg.Tags.Deadline)
  assert(quantity > 0, "No staked tokens to vote")
  Votes[target] = Votes[target] or { yay = 0, nay = 0, deadline = deadline }
  Votes[target][side] = Votes[target][side] + quantity
end

-- Finalization Handler
local finalizationHandler = function(msg)
  local currentHeight = tonumber(msg['Block-Height'])
  -- Process voting
  for target, voteInfo in pairs(Votes) do
      if currentHeight >= voteInfo.deadline then
          if voteInfo.yay > voteInfo.nay then
              print("Handle Vote")
          end
          -- Clear the vote record after processing
          Votes[target] = nil
      end
  end
end

-- wrap function to continue handler flow
local function continue(fn)
  return function (msg)
    local result = fn(msg)
    if (result) == -1 then
      return 1
    end
    return result
  end
end

Handlers.add("vote",
  continue(Handlers.utils.hasMatchingTag("Action", "Vote")), Handlers.vote)
-- Finalization handler should be called for every message
Handlers.add("finalize", function (msg) return -1 end, finalizationHandler)